iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 22
0

》JSON
一般在 create 建造一些你要的物件(重複的物件),是很繁瑣的,今日我們就要帶大家如何用 JSON 資料來紀錄這些物件的屬性位置,方便管理修改。

》Javascript 內容
在放物件的時候,如下。當多量的時候,你就必須再程式碼裡面一直調動 x 或 y 的位置。

let ground = this.add.tileSprite(180, 608, 64 * 6, 64, 'tile')		// 寬重複 6 份
this.physics.add.existing(ground, true)

先把資料整理

scene.gameData = {
    platforms: [
        { x: 180, y: 608, num: 6, key: 'tile' },
        { x: 300, y: 500, num: 2, key: 'tile' },
        { x: 50, y: 400, num: 3, key: 'tile' }
        .....
    ]
}

把原本寫在 create platforms ,都用資料去產生

scene.setData = function() {
    this.platforms = this.add.group()
    this.gameData.platforms.forEach(item => {
    let w = this.textures.get(item.key).get(0).width		// 取得素材的寬
    let h = this.textures.get(item.key).get(0).height		// 取得素材的高
    let obj = this.add.tileSprite(item.x, item.y, item.num * w, h, item.key)
        this.physics.add.existing(obj, true)
        this.platforms.add(obj)
    }
}

在 create 的生命週期,去執行 setData

scene.create = function() {
    .....
    this.setData()
    .....
}

接著我們要把資料拉成 json 擋,去載入它,這樣就不用把資料寫在 scene.gameData 上,而是外部載入檔案。

scene.preload = function() {
    .....
    this.load.json('data', 'assets/data.json')
}

scene.setData = function() {
    .....
    this.gameData = this.cache.json.get('data')
}

》結論
今日我們學到了如何用資料來記每個物件的位置狀態等,並用載入外部檔案的方式來引入到遊戲中,就不用把每個物件的資訊寫在程式裡。這樣比較好管理、調整。


今天就先到這裡,我們明天見。


上一篇
Day 21:Jump mechanics
下一篇
Day 23:Follow
系列文
Phaser 幫我撐個 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言